#include<cstdio>
#include<cstring>
#include<algorithm>

using namespace std;
const int maxn=2e7+10, P=998244353;

inline int read() {
    int x=0, f=1; char c=getchar();
    for(; c<'0'||c>'9'; c=getchar()) if(c=='-') f=0;
    for(; c>='0'&&c<='9'; c=getchar()) x=x*10+c-'0';
    return f?x:-x;
}
inline int add(int x, int y) {x+=y; return x>=P?x-P:x;}
inline int del(int x, int y) {x-=y; return x<0?x+P:x;}
inline int ksm(int x, int y) {
    int s=1;
    for(; y; y>>=1, x=1ll*x*x%P)
        if(y&1) s=1ll*s*x%P;
    return s;
}
int gcd(int x, int y) {return y?gcd(y, x%y):x;}
int n, m, a, b, ans;
int col[100][100], c[100];
int tmp[10000];

inline int C(int x, int y) {
    int s=1, t=1;
    for(int i=1; i<=y; ++i) s=1ll*s*(x-i+1)%P, t=1ll*t*i%P;
    return 1ll*s*ksm(t, P-2)%P;
}

inline void chk() {

    int x, y;
    for(int i=1; i<=n; ++i) tmp[i]=c[i];
    sort(tmp+1, tmp+n+1);
    for(int i=0; i<n; ++i) if(tmp[i+1]>tmp[i]+1) return;
    x=tmp[n];
    int cnt=0;
    for(int i=1; i<n; ++i)
        for(int j=i+1; j<=n; ++j) tmp[++cnt]=col[i][j];
    sort(tmp+1, tmp+cnt+1);
    for(int i=0; i<cnt; ++i) if(tmp[i+1]>tmp[i]+1) return;
    y=tmp[cnt];
    

    //rotate
    for(int d=1; d<n; ++d) if(n%d==0) {
        int fl=1;
        for(int i=0; i<d; ++i) {
            for(int j=0; j<n/d; ++j)
                fl&=(c[i+1]==c[i+j*d+1]);
        }
        for(int i=0; i<n; ++i)
            for(int j=i+1; j<n; ++j) {
                int t=i/d;
                fl&=(col[i+1][j+1]==col[i-d*t+1][j-d*t+1]);
            }
        if(fl) return;
    }
    //duicheng
    if(n%2==0) {
        for(int i=0; i<n; ++i) {
            int fl=1;
            for(int j=0; j<n; ++j)
                fl&=(c[(i+j)%n+1]==c[(i-j+n)%n+1]);
            for(int j=0; j<n; ++j)
                for(int k=0; k<n; ++k) {
                    int dj=((i-(j-i))%n+n)%n;
                    int dk=((i-(k-i))%n+n)%n;
                    fl&=(col[j+1][k+1]==col[dj+1][dk+1]);
                }
            if(fl) return;
        }
    }

    for(int i=0; i<n; ++i) {
        int fl=1;
        for(int j=0; j<n; ++j)
            fl&=(c[(i+1+j)%n+1]==c[(i-j+n)%n+1]);
        for(int j=0; j<n; ++j)
            for(int k=0; k<n; ++k) {
                int dj=((i+1-(j-i))%n+n)%n;
                int dk=((i+1-(k-i))%n+n)%n;
                fl&=(col[j+1][k+1]==col[dj+1][dk+1]);
            }
        if(fl) return;
    }

    //C(a, x)*C(b, y)
    ans=add(ans, 1ll*C(a, x)*C(b, y)%P);
}

void dfs1(int x, int y) {
    if(x>n) {
     //   for(int i=1; i<=n; ++i) printf("%d ", c[i]); puts("");
     //   for(int j=0; j<n; ++j)
     //       for(int k=j+1; k<n; ++k) printf("%d ", col[j][k]); puts("");
     //   puts("");
        chk();
        return;
    }
    if(y>n) return dfs1(x+1, x+2);
    for(int i=1; i<=n*(n-1)/2&&i<=b; ++i) {
    //for(int i=1; i<=b; ++i) {
        col[x][y]=col[y][x]=i;
        dfs1(x, y+1);
    }
}

void dfs(int x) {
    if(x>n) {
        dfs1(1, 2);
        return;
    }
    for(int i=1; i<=n&&i<=a; ++i) {
//for(int i=1; i<=a; ++i) {
        c[x]=i;
        dfs(x+1);
    }
}

int main() {
    freopen("clown.in", "r", stdin);
    freopen("clown.out", "w", stdout);
    m=read(), n=1;
    for(int i=1; i<=m; ++i) {
        int x=read();
        n*=x;
    }
    a=read(), b=read();
    dfs(1);
    printf("%d", ans);
    
    return 0;
}